home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / misc / TCS.lha / TCS / examples / includes / shl_strtup.i < prev   
Text File  |  2000-04-13  |  6KB  |  234 lines

  1. *******************************************************************************
  2. * shl_strtup.i 3.4.2
  3. *******************************************************************************
  4. * INFO    shell startup code; operations performed:
  5. *      1. opens all needed libraries
  6. *      2. if required, parses the command line with ReadArgs(): the
  7. *         arguments pointers are stored in CmdLnArgs (a buffer in
  8. *         dat.i); the template must be specified in the custom code
  9. *         at the label tmplt; the number of arguments must be set
  10. *         by the custom code with the constant ARGSNO (leave it
  11. *         undefined if you don't need parsing)
  12. *      3. initializes a TCS display
  13. *      4. call the initialization routine of custom program
  14. *         (_PrgInit) which must return ccr=eq on error
  15. *      5. turns off the OS
  16. *      6. takes control of the hardware
  17. *      7. activates the TCS display
  18. *      8. calls the main routine of custom program (_PrgMain)
  19. *      9. hides the TCS display
  20. *     10. restores the hardware status
  21. *     11. re-activates the OS
  22. *     12. call the cleanup routine of custom program (_PrgClnUp)
  23. *         (this is called even if _PrgInit failed)
  24. *     13. frees all the resources allocated
  25. * NOTE    - use the macro CALLTCS to call tcs.library functions
  26. *    - no need of any include other than tcs.library's
  27. *******************************************************************************
  28.  
  29.     macro    CALLTCS
  30.     movea.l    _TCSBase,a6
  31.     jsr    (_LVOTCS_\1,a6)
  32.     endm
  33.  
  34.  
  35.  
  36.     code
  37.  
  38. *******************************************************************************
  39. * open libs / command line parsing
  40.  
  41.     movea.l    4.w,a6
  42.     lea.l    DOSNm,a1
  43.     moveq.l    #37,d0
  44.     jsr    (-552,a6)    ;OpenLibrary(...)
  45.     move.l    d0,_DOSBase
  46.     beq    .exit
  47.     lea.l    GfxNm,a1
  48.     moveq.l    #37,d0
  49.     jsr    (-552,a6)    ;OpenLibrary(...)
  50.     move.l    d0,_GfxBase
  51.     beq    .ClsDOS
  52.     lea.l    TCSNm,a1
  53.     moveq.l    #1,d0
  54.     jsr    (-552,a6)    ;OpenLibrary(...)
  55.     move.l    d0,_TCSBase
  56.     beq.s    .ClsGfx
  57.  
  58.     ifd    ARGSNO
  59.     move.l    #tmplt,d1
  60.     move.l    #CmdLnArgs,d2
  61.     moveq.l    #0,d3
  62.     movea.l    _DOSBase,a6
  63.     jsr    (-798,a6)    ;ReadArgs(tmplt,CmdLnArgs,0)
  64.     move.l    d0,_RDArgs
  65.     beq    .ClsLibs
  66.     endif
  67.  
  68. *******************************************************************************
  69. * display/custom program initialization
  70.  
  71.     lea.l    DsplDef,a0    ;our TCS display
  72.     CALLTCS    InitDspl    ;initialize it
  73.     move.l    d0,DIAdr    ;keep its structure address
  74.     beq.s    .FreeArgs    ;in case of error...
  75.  
  76.     bsr    _PrgInit    ;custom init
  77.     beq.s    .PrgClnUp    ;if error...
  78.  
  79. *******************************************************************************
  80. * OS/HW takeover
  81.  
  82.     movea.l    _DOSBase,a6
  83.     moveq.l    #40,d1
  84.     jsr    (-198,a6)    ;Delay(40)
  85.  
  86.     bsr    TkSys    ;get OS and HW control
  87.  
  88. *******************************************************************************
  89. * start custom code
  90.  
  91.     movea.l    DIAdr,a0    ;our display
  92.     CALLTCS    ShwDspl    ;activate it!
  93.     beq    .RlsSys    ;if failed to (never should)...
  94.     jsr    _PrgMain    ;call custom code
  95.  
  96. *******************************************************************************
  97. * HW/OS restoration / custom program cleanup / resources release
  98.  
  99.     movea.l    DIAdr,a0    ;our display
  100.     CALLTCS    WtBltFRPass    ;wait for blitter to finish
  101.     movea.l    DIAdr,a0    ;our display
  102.     suba.l    a1,a1    ;don't show anything after
  103.     CALLTCS    HideDspl    ;hiding it
  104. .RlsSys    bsr    RlsSys    ;restore HW and OS status
  105.  
  106. .PrgClnUp    bsr    _PrgClnUp    ;custom cleanup
  107.  
  108.     movea.l    DIAdr,a0    ;our display
  109.     CALLTCS    FreeDspl    ;free its resources
  110.  
  111. .FreeArgs
  112.     ifd    ARGSNO
  113.     move.l    _RDArgs,d1
  114.     movea.l    _DOSBase,a6
  115.     jsr    (-858,a6)    ;FreeArgs(_RDArgs)
  116.     endif
  117.  
  118. .ClsLibs    movea.l    4.w,a6
  119.     movea.l    _TCSBase,a1
  120.     jsr    (-414,a6)    ;CloseLibrary(...)
  121. .ClsGfx    movea.l    4.w,a6
  122.     movea.l    _GfxBase,a1
  123.     jsr    (-414,a6)    ;CloseLibrary(...)
  124. .ClsDOS    movea.l    4.w,a6
  125.     movea.l    _DOSBase,a1
  126.     jsr    (-414,a6)    ;CloseLibrary(...)
  127.  
  128. .exit    moveq.l    #0,d0
  129.     rts
  130.  
  131.  
  132.  
  133. *******************************************************************************
  134. * TkSys 0.0.1
  135. *******************************************************************************
  136. * INFO    turns AmigaOS OFF and takes control of the hardware
  137. *******************************************************************************
  138.  
  139. TkSys    movem.l    d0-d7/a0-a6,-(sp)
  140.     movea.l    _GfxBase,a6
  141.     move.l    ($22,a6),_SysView    ;gb_ActiView
  142.     suba.l    a1,a1
  143.     jsr    (-222,a6)    ;LoadView(NULL)
  144.     jsr    (-270,a6)    ;WaitTOF()
  145.     jsr    (-270,a6)    ;WaitTOF()
  146.  
  147.     movea.l    _GfxBase,a6
  148.     jsr    (-456,a6)    ;OwnBlitter()
  149.     jsr    (-228,a6)    ;WaitBlit()
  150.  
  151.     movea.l    4.w,a6
  152.     jsr    (-132,a6)    ;Forbid()
  153.     jsr    (-120,a6)    ;Disable()
  154.  
  155.     move.w    $dff01c,_SysINTENA
  156.     move.w    #$7fff,$dff09a    ;clear INTENA.all
  157.     move.w    #$7fff,$dff09c    ;clear INTREQ.all
  158.     move.w    $dff002,_SysDMACON
  159.     move.w    #$7fff,$dff096    ;clear DMACON.all
  160.  
  161.     bsr    GetVBR
  162.     lea.l    ([_VBR.l],$64.w),a0    ;first autovector address
  163.     movem.l    (a0),d1-d7    ;get system autovectors 1-7
  164.     lea.l    _SysVecs,a0
  165.     movem.l    d1-d7,(a0)    ;store them
  166.  
  167.     movem.l    (sp)+,d0-d7/a0-a6
  168.     rts
  169.  
  170.  
  171.  
  172. *******************************************************************************
  173. * RlsSys 0.0.2
  174. *******************************************************************************
  175. * INFO    releases the hardware and turns AmigaOS ON
  176. *******************************************************************************
  177.  
  178. RlsSys    movem.l    d0-d7/a0-a6,-(sp)
  179.  
  180.     lea.l    _SysVecs,a0    ;get system
  181.     movem.l    (a0),d1-d7    ;autovectors
  182.     lea.l    ([_VBR.l],$64.w),a0    ;first autovector address
  183.     movem.l    d1-d7,(a0)    ;restore them
  184.  
  185.     move.w    #$7fff,$dff09a    ;clear INTENA.all
  186.     move.w    #$7fff,$dff09c    ;clear INTREQ.all
  187.     move.w    #$7fff,$dff096    ;clear DMACON.all
  188.     move.w    _SysDMACON,d0
  189.     ori.w    #$8000,d0
  190.     move.w    d0,$dff096    ;restore system DMACON
  191.     move.w    _SysINTENA,d0
  192.     ori.w    #$c000,d0
  193.     move.w    d0,$dff09a    ;restore system INTENA
  194.  
  195.     movea.l    4.w,a6
  196.     jsr    (-126,a6)    ;Enable()
  197.     jsr    (-138,a6)    ;Permit()
  198.  
  199.     movea.l    _GfxBase,a6
  200.     jsr    (-462,a6)    ;DisownBlitter()
  201.  
  202.     movea.l    _GfxBase,a6
  203.     movea.l    _SysView,a1
  204.     jsr    (-222,a6)    ;LoadView(_SysView)
  205.     jsr    (-270,a6)    ;WaitTOF()
  206.     jsr    (-270,a6)    ;WaitTOF()
  207.     move.l    ([_GfxBase.l],$26.w),$dff080 ;gb_copinit
  208.     move.w    #1,$dff088    ;restore system copperlist
  209.  
  210.     movem.l    (sp)+,d0-d7/a0-a6
  211.     rts
  212.  
  213.  
  214.  
  215. *******************************************************************************
  216. * GetVBR 0.0.0
  217. *******************************************************************************
  218. * INFO    retrieves the VBR
  219. * OUT    _VBR.l    variable holding the VBR
  220. *******************************************************************************
  221.  
  222. GetVBR    movem.l    a5-a6,-(sp)
  223.     movea.l    4.w,a6
  224.     btst.b    #0,($129,a6)
  225.     beq.s    .exit    ;if 68000...
  226.     lea.l    (_GetVBR,pc),a5
  227.     jsr    (-30,a6)    ;Supervisor()
  228. .exit    movem.l    (sp)+,a5-a6
  229.     rts
  230.  
  231. _GetVBR    dc.l    $4e7ad801    ;movec.l vbr,a5
  232.     move.l    a5,_VBR
  233.     rte
  234.